package Personajes;

import javax.swing.*;

import Logica_Moviemientos.*;
public class Mario extends Personaje implements Runnable {
	protected Icon[] imagenes;
	protected Icon ultimo;
	protected Inteligencia_Manual inteligencia;
	protected boolean derecha, izquierda, salto;
	protected boolean murio;

	/**Constructor. */
	public Mario(){
		super();
		cargarImagenes();
		this.setGrafico(imagenes[0]);
		ultimo = imagenes[0];
		murio = false;
	}
	
	/**Carga las imagenes del mario en un arreglo. */
	public void cargarImagenes(){
		imagenes = new Icon[19];
		imagenes[0] = new ImageIcon(getClass().getResource("/Imagenes/Personajes/Mario/mini-mario/mario_der.png"));
		imagenes[1] = new ImageIcon(getClass().getResource("/Imagenes/Personajes/Mario/mini-mario/mario_camina_der.gif"));
		imagenes[2] = new ImageIcon(getClass().getResource("/Imagenes/Personajes/Mario/mini-mario/mario_salta_der.png"));
		imagenes[3] = new ImageIcon(getClass().getResource("/Imagenes/Personajes/Mario/mini-mario/mario_izq.png"));
		imagenes[4] = new ImageIcon(getClass().getResource("/Imagenes/Personajes/Mario/mini-mario/mario_camina_izq.gif"));
		imagenes[5] = new ImageIcon(getClass().getResource("/Imagenes/Personajes/Mario/mini-mario/mario_salta_izq.png"));		
	}
	
	/**Retorna si true si mario murio, false en caso contrario. */
	public boolean murio(){
		return murio;
	}
	
	/**Modifica si el mario murio o no. */
	public void setMurio(){
		murio = true;
		JOptionPane.showMessageDialog(null,"Has perdido. Reinicia el juego.",null,JOptionPane.INFORMATION_MESSAGE,null);
		System.exit(0);
	}
	
	/**Asigna una inteligencia al personaje. */
	public void setInteligencia(Inteligencia_Manual i){
		inteligencia = i;
	}
	
	/**Retorna true si se esta moviendo a la derecha
	 * false en caso contrario. */
	public boolean getDerecha(){
		return derecha;
	}
	
	/**Setea si el personaje avanza a la derecha. */
	public void setDerecha(boolean b){
		izquierda = false;
		derecha = b;
	}
	
	/**Retorna true si se esta moviendo a la izquierda,
	 * false en caso contrario. */
	public boolean getIzquierda(){
		return izquierda;
	}
	
	/**Setea si el personaje avanza a la izquierda. */
	public void setIzquierda(boolean b){
		derecha = false;
		izquierda = b;
	}
	
	/**Retorna true si el personaje esta saltando, false en caso contrario. */
	public boolean getSalto(){
		return salto;
	}
	
	/**Setea si el personaje salta. */
	public void setSalto(boolean b){
		salto = b;
	}
	
	@Override
	public void run() {
		while( true ){
			try{
				if(!murio){
					if(derecha && salto){
						if(ultimo == imagenes[0]) this.setGrafico(imagenes[2]);
						else this.setGrafico(imagenes[5]);
						inteligencia.saltar();
					}
					else{
						if(izquierda && salto){
							if(ultimo == imagenes[0]) this.setGrafico(imagenes[2]);
							else this.setGrafico(imagenes[5]);
							inteligencia.saltar();
						}
						else{
							if(salto){
								if(ultimo == imagenes[0]) this.setGrafico(imagenes[2]);
								else this.setGrafico(imagenes[5]);
								inteligencia.saltar();
							}
							else{
								if(derecha){
									this.setGrafico(imagenes[1]);
									ultimo = imagenes[0];
									inteligencia.moverDerecha();
								}
								else{
									if(izquierda){
										this.setGrafico(imagenes[4]);
										ultimo = imagenes[3];
										inteligencia.moverIzquierda();
									}
									else{
										this.setGrafico(ultimo);
										inteligencia.nada();
									}
								}
							}
						}
					}
					this.setIcon(getGrafico());
					Thread.sleep(30);
				}
				else{
					inteligencia.nada();
					break;
				}
			}
			catch( Exception e ){
				System.out.println("Mario :: run(): "+e);
			}
		}
	}
	

}
